package modelo

import exepciones.perdisteException
import java.util.ArrayList
import java.util.List
import org.uqbar.commons.model.UserException
import org.uqbar.commons.utils.Observable
import org.uqbar.commons.model.ObservableUtils

@Observable
class Terreno {
	@Property String nombre = "nada"
	@Property List<Atacante> fila = new ArrayList<Atacante>

	def String getPlantas() {
		val nombres = new StringBuilder
		fila.forEach[p|nombres.append(nombres + "," + p.getNombre)]
		return nombres.toString
	}

	def elimina(Atacante atacante) {
		if (fila.contains(atacante)) {
			fila.remove(atacante)
			cambioFila()
		} else { 
			throw new perdisteException
		}
	}

	def cambioFila() {
		ObservableUtils.firePropertyChanged(this, "fila", this.fila)
		ObservableUtils.firePropertyChanged(this, "plantas", this.fila)
	}

	def agrega(Planta planta) {
		fila.add(planta)
		this.cambioFila
	}

	def Planta dameLaUltimaPlanta(Observer obs) {
		if (fila.isEmpty) {
			obs.ahoraPerdiste
			throw new UserException("perdiste la partida")
		} else
			return (fila.last as Planta)
	}

	def agregaPlantaAquatica(Planta planta) {
		this.agrega(planta.clonate)
	}

	def agregaPlantaTerrestre(Planta planta) {
		this.agrega(planta.clonate)
	}

}
